/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import java.util.ArrayList;
import java.util.Date;
import javax.print.attribute.DateTimeSyntax;

/**
 *
 * @author aj48640
 */
public class Commande 
{
    private static int confirmationSeed = 69;
    private static int confirmationMul = 42;
    //contient chacun des plats et les quantités
    private ArrayList<LigneCommande> lignesCommande;
    //le client qui est associé à la commande
    private Utilisateur client;
    //L'adresse associé au client et à la commande
    private String adresse;
    //L'adresse du restaurant que l'on fait livrer¸
    private ArrayList<String> adresseRestaurant;
    //un numéro de confirmation
    private int noConfirmation;
    
    private Date dateLivraison;

    public Commande(Utilisateur client)
    {
        lignesCommande = new ArrayList<LigneCommande>();
        this.client = client;

        //Par défaut, on met l'adresse du client
        this.adresse = client.getAdresse();
        this.adresseRestaurant = new  ArrayList<String>();
    }

    /**
     * @return the client
     */
    public Utilisateur getClient() 
    {
        return client;
    }

    /**
     * @param client the client to set
     */
    public void setClient(Utilisateur client) 
    {
        this.client = client;
    }

    /**
     * @return the adresse
     */
    public String getAdresse() 
    {
        return adresse;
    }

    /**
     * @param adresse the adresse to set
     */
    public void setAdresse(String adresse) 
    {
        this.adresse = adresse;
    }
    
    public void AddAdresseRestaurant ( String adresse )       
    {
        if (!this.adresseRestaurant.contains(adresse))
            this.adresseRestaurant.add(adresse);
    }
    
    public String[] GetAdresseRestaurant ( )
    {
        return this.adresseRestaurant.toArray(new String[0]);
    }

    /**
     * Permet d'ajouter un plat dans la commande
     * @param plat
     * @param quantite 
     */
    public void addLigne(Plat plat, int quantite)
    {
        lignesCommande.add(new LigneCommande(plat, quantite));
    }
    
    /**
     * Retourne le nombre de plats dans la commande
     * @return 
     */
    public int NombrePlats ( )
    {
        return this.lignesCommande.size();
    }
    
    /**
     * Permet d'obtenir une ligne de commande c'est-à-dire 
     * un plat et une quantité.
     * @param index
     * @return 
     */
    public LigneCommande ObtenirLigneCommande ( int index )
    {
        return this.lignesCommande.get(index);
    }
    
    public int ObtenirNoConfirmation ()
    {
        this.noConfirmation = confirmationSeed*confirmationMul;
        
        confirmationSeed +=1;
        
        return this.noConfirmation;
        
    }
    
    public int GetNoConfirmation ( )
    {
        return this.noConfirmation;
    }

    /**
     * @return the dateLivraison
     */
    public Date getDateLivraison() {
        return dateLivraison;
    }

    /**
     * @param dateLivraison the dateLivraison to set
     */
    public void setDateLivraison(Date dateLivraison) {
        this.dateLivraison = dateLivraison;
    }
    

}
